/*
 *  玩家类
 *  游戏流程这样做: 建立一个流程成员函数,10个对象,然后从教官开始走流程,而信息就用死循环来等待客户端的请求,用多个局部变量来记录某些每回合只能做一次的行为,例如攻击.消息用仿照aa包,定义一些宏解决aa包值问题
 */

#ifndef PC_H
#define PC_H
#include <string>
using namespace std;
#include "macro.h"
#include "card.h"

class Player
{
private:
    string              m_name;         //玩家名
    unsigned short      m_id;           //身份标识,参照macro.h
    bool                m_isself;       //is self
    string               m_from;        //单一玩家的IP
    int                 m_x;            //玩家所处横坐标
    int                 m_y;            //玩家所处纵坐标
    int                 m_map_rev;      //玩家所处坐标的值,用左各种计算修正
    unsigned short      m_hp;           //血,学生暂定上限6滴,教官为 (6*学生数量) ,按实物版
    unsigned short      m_cruel;        //暴戾值
    int                 m_weapon;       //所持武器,空手用 BLANK
    int                 m_equitment;    //所持防具,没有装备用 BLANK
    int                 m_ab_status;    //异常状态,具体参照macro.h
    //Card                m_hand[7];      //手牌,预留7项,上限为5,教官为7
    
public:
    Player();  //无参构造
    Player(string& name, string& from, unsigned short hp, int cruel, int weapon, int equitment, int ab_status, unsigned short _id);  //有参构造
    ~Player();  //析构函数
public:
    void    Process();         //流程函数,在游戏线程中根据player对象数组或者其他容器,顺次循环调用此函数进行回合活动
    bool    Attack(Player &pc);    //攻击,返回是否命中
    bool    Move();                //移动,返回是否投掷了骰子
    
public:
    void MakeCommander(int& pcs);  //随机得到教官后初始化教官数据
public:
    string Json(Player& player, char buff[4096], int& identifier);
    void upDate(
                string& name,
                unsigned short& id,
                bool& isself,
                string& from,
                int& x,
                int& y,
                int& map_rev,
                unsigned short& hp,
                unsigned short& cruel,
                int& weapon,
                int& equitment,
                int& ab_status,
                Card hand[7]
                );
    
};

#endif //PC_H







































